1.flask-migrate 的介绍

  • flask-migrate 必须依赖于 flask-script

  • flask-migrate 的作用就是对数据库表进行增删改(注: flask-sqlalchemy 只能对表进行增加和删除的操作)

2.flask-migrate 的安装

pip3 install flask-migrate -i https://pypi.douban.com/simple  # 使用豆瓣的镜像

3.flask-migrate 的使用

# app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand

db = SQLAlchemy()

from models import *

app = Flask(__name__)
app.config.from_object('settings.ProConfig')

db.init_app(app)

manage = Manager(app)
Migrate(app, db)
manage.add_command('db', MigrateCommand) # 添加数据库迁移命令


@app.route('/home')
def home():
# 添加数据
# db.session.add(Users(name='Kevin', age=18, address='横沥'))
 # db.session.commit()
 # db.session.remove()

# 查询数据
# result = db.session.query(Users.name, Users.age).all()
# print(result)
# db.session.remove()

    return '首页'


if __name__ == '__main__':
manage.run()

# settings.py

class BaseConfig(object):
 # SQLAlchemy 配置
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:@127.0.0.1:3306/db1?charset=utf8'
    SQLALCHEMY_MAX_OVERFLOW = 10  # 允许溢出多少个连接(即:连接池的连接已满后,还可以创建多少条连接)
    SQLALCHEMY_POOL_SIZE = 5  # 连接池中的连接数
    SQLALCHEMY_POOL_TIMEOUT = 10  # 连接池中没有线程后最多等待的时间(单位:秒),如果超过指定时间还没有连接就报错
    SQLALCHEMY_POOL_RECYCLE = -1  # 多久之后对线程池中的线程进行一次连接的回收(重置)(单位:秒)-> -1表示不重置


class ProConfig(BaseConfig):
    pass

# models.py

from sqlalchemy import Column, Integer, VARCHAR
from app import db


# Users 表的类
class Users(db.Model):  # 创建表的类一定要继承 db.Model
    __tablename__ = 'users'  # 表名
    id = Column(Integer, primary_key=True, autoincrement=True)  # 整型 设置主键 设置自增列
    name = Column(VARCHAR(32), nullable=False, index=True)  # varchar类型(长度:32) 不允许为空 将name字段设置为索引
    age = Column(Integer)  # 整形
    address = Column(VARCHAR(32))  # varchar类型(长度:32)

  • 所生成的数据库迁移命令

    • 注意: 在进行第一次数据库迁移的时候必须是空的数据库没有任何表,否则会报错

python app.py db init  # 初始化 migrations 文件夹用于记录表的修改情况,只执行一次

python app.py db migrate  # 类似于 Django 中的 makemigrations

python app.py db upgrade  # 类似于 Django 中的 migrate